{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.8.0\n"
     ]
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "\n",
    "from PIL import Image\n",
    "from IPython.display import display\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from keras.datasets import fashion_mnist\n",
    "from scipy.misc import  imresize\n",
    "print(tf.__version__)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\cheng\\appdata\\local\\programs\\python\\python37\\lib\\site-packages\\ipykernel_launcher.py:8: DeprecationWarning:     `imresize` is deprecated!\n",
      "    `imresize` is deprecated in SciPy 1.0.0, and will be removed in 1.2.0.\n",
      "    Use ``skimage.transform.resize`` instead.\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()\n",
    "\n",
    "image = train_images[0]\n",
    "original_size = 28\n",
    "target_size = 200\n",
    "up_sampling_size = 84\n",
    "    \n",
    "up_sampling_image = imresize(image.reshape(28,28),(up_sampling_size,up_sampling_size),interp=\"nearest\")\n",
    "phase_image_padded = np.pad(up_sampling_image,   # pad the phase image with 0's\n",
    "                                int((target_size-up_sampling_size)/2),\n",
    "                                mode='constant',constant_values=0)\n",
    "\n",
    "phase_image = np.exp(1j*2.0*np.pi*phase_image_padded)   # convert to phase image\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x1f83847e308>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqkAAAEyCAYAAADZb0naAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi41LCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvSM8oowAAHxtJREFUeJzt3Xu8lWWZ//HvJSdDBSHQtoKCipqaom7RxkSLVNQStTAYMyZN0nRKmyzFSseitPIwv04OJkFWgMSgzoyOmnkqj6CIICCgqBu2gKCIYsjhmj94+M261tqHxV6Hfe/N5/16rdde33s9az3Xfvb29uJZ93q2ubsAAACAlOzQ2gUAAAAA+WhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkJyKNalmNtTMFpjZIjO7olL7AQCUjjkbQGqsEtdJNbMOkl6SdKKkOknPSBrp7i+WfWcAgJIwZwNIUaXOpA6StMjdX3b3DyRNljSsQvsCAJSGORtAcjpW6HX3lPR6Tq6TdHRjG3e2Lr6jdqpQKQDas7V66013793adbRx2zRnS1LX7j28+257VrQoAO3PmhVLtW7NW1bMtpVqUhvaeVhXYGajJY2WpB3VVUfbkAqVAqA9+7P/6dXWrqEdaHbOluK83a13jUbdfEel6wLQzky89Oyit63U2/11kvrm5D6SluVu4O7j3L3W3Ws7qUuFygAAFKHZOVuK83bX7j2rVhyA7VOlmtRnJA0ws/5m1lnSCEl3V2hfAIDSMGcDSE5F3u53941mdomk+yR1kDTe3edWYl8AgNIwZwNIUaXWpMrd75F0T6VeHwBQPszZAFLDX5wCAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAclrcpJpZXzN7yMzmmdlcM/tGNn6NmS01s1nZ7dTylQsAaCnmbQBtSccSnrtR0r+4+7NmtoukmWb2QPbYTe7+s9LLAwCUEfM2gDajxU2qu9dLqs/urzWzeZL2LFdhAIDyYt4G0JaUZU2qmfWTdLikp7KhS8xstpmNN7Me5dgHAKB8mLcBpK7kJtXMdpY0TdKl7v6OpF9L2lfSQG35F/sNjTxvtJnNMLMZG7S+1DIAAEUqx7y9bs3qqtULYPtUUpNqZp20ZaL7g7v/hyS5+3J33+TumyXdKmlQQ89193HuXuvutZ3UpZQyAABFKte83bV7z+oVDWC7VMqn+03SbZLmufuNOeM1OZudKWlOy8sDAJQL8zaAtqSUT/cfK+lcSS+Y2axsbIykkWY2UJJLWiLpqyVVCAAoF+ZtAG1GKZ/u/6ska+Che1peDgCgUpi3AbQl/MUpAAAAJIcmFQAAAMmhSQUAAEByaFIBAACQHJpUAAAAJIcmFQAAAMmhSQUAAEByaFIBAACQHJpUAAAAJIcmFQAAAMmhSQUAAEByaFIBAACQHJpUAAAAJIcmFQAAAMmhSQUAAEByaFIBAACQHJpUAAAAJIcmFQAAAMmhSQUAAEByaFIBAACQHJpUAAAAJIcmFQAAAMmhSQUAAEByaFIBAACQHJpUAAAAJKdjKU82syWS1kraJGmju9eaWU9JUyT1k7RE0tnu/lZpZQIAyoF5G0BbUY4zqZ9094HuXpvlKyQ96O4DJD2YZQBAOpi3ASSvEm/3D5M0Mbs/UdIZFdgHAKB8mLcBJKfUJtUl3W9mM81sdDa2u7vXS1L2dbcS9wEAKB/mbQBtQklrUiUd6+7LzGw3SQ+Y2fxin5hNjqMlaUd1LbEMAECRyjJvd+tdU6n6AEBSiWdS3X1Z9nWFpOmSBklabmY1kpR9XdHIc8e5e62713ZSl1LKAAAUqVzzdtfuPatVMoDtVIubVDPbycx22Xpf0kmS5ki6W9KobLNRku4qtUgAQOmYtwG0JaW83b+7pOlmtvV1/uju/2Nmz0i6w8zOl/SapOGllwkAKAPmbQBtRoubVHd/WdJhDYyvkjSklKIAAOXHvA2gLeEvTgEAACA5NKkAAABIDk0qAAAAkkOTCgAAgOTQpAIAACA5NKkAAABIDk0qAAAAkkOTCgAAgOTQpAIAACA5NKkAAABIDk0qAAAAkkOTCgAAgOTQpAIAACA5NKkAAABIDk0qAAAAkkOTCgAAgOTQpAIAACA5HVu7AAAA0L69+/cNIV82eJ+Qb3369W16vQ47WMHYps2+7YUhaZxJBQAAQHJoUgEAAJAcmlQAAAAkhzWpAABgm+SvCc1fD9qnx4dC/v1floZ83x7dQx5+aE3IGzbF17tz7htN7q8YDa1j3ZbXbO57RvlxJhUAAADJoUkFAABAcmhSAQAAkJwWr0k1swMkTckZ2kfS9yXtKukCSSuz8THufk+LKwQAlAXzNqrllAG9Qv7abstD/s1RQ0Pe69WZIb+5blPI5x3VJ+THX3u7YJ/zl7/bZE3NrSH9UOcOTW7/wcbNTT4f5dfiJtXdF0gaKElm1kHSUknTJX1Z0k3u/rOyVAgAKAvmbQBtSbne7h8iabG7v1qm1wMAVBbzNoCklatJHSFpUk6+xMxmm9l4M+tRpn0AAMqHeRtA0kq+TqqZdZZ0uqQrs6FfS/qBJM++3iDpvAaeN1rSaEnaUV1LLQMAUKRyzNvdetfkP4ztSHPrO3fqFM+BbXyzPuR+u+8U8sk/fSzk333t4yHvq7dC3nu/+HxJ6tgzrnud+s4eIf99Y1znmv8tjOq9KuTpa3cP+a33N4S8eOV7BTWgvMpxJvUUSc+6+3JJcvfl7r7J3TdLulXSoIae5O7j3L3W3Ws7qUsZygAAFKnkebtr955VLBfA9qgcTepI5bxlZGa5/7w+U9KcMuwDAFA+zNsAklfS2/1m1lXSiZK+mjP8EzMbqC1vGy3JewwA0IqYtwG0FSU1qe6+TtKH88bOLakiAEDFMG+jEvbqGT9bMvuYwSHv8dBfQl755piQ7+txX3zBSTH/vcfOIf/+wPMLapixJF7n9KSPxse/tOuykDetiWtQbWP4z0Jn9FgT8rXLrGCfqCz+4hQAAACSQ5MKAACA5NCkAgAAIDk0qQAAAEhOyRfzBwAA27fHF70Z8ms33B43eHZpiIP/+nDI4444NuRhi2c2ub+vLL6vYOysU04L+a3LRoZ8y+j/F/Kn9z0o5LfPPSPkBx57LeQPpt7dZE0oP86kAgAAIDk0qQAAAEgOTSoAAACSw5pUAABQkom16+JAFw9x9Z1/DHn5EdeE/KED4oX09++0NuS6sd8OedOPbiuo4Z45K0Me+aspIT88+YWQB/frEfJB0/875EMfnxzyNesLdokK40wqAAAAkkOTCgAAgOTQpAIAACA5rEkFAAAl2dxjj5D/eso5IS97/Z2Qh5z3w5CPrzk95F/WWcgfvujmkEf94smCGj55aE3Ia9ZvDvn7Qw8IeeRNj4V80ZmHxNc75HNxBzPrCvaJyuJMKgAAAJJDkwoAAIDk0KQCAAAgOaxJBQAAQYcd4prQTZvjdU8/1LlDyL2/dHvIfU/8Xsg3fmVQyA/uVxvy/JdnhDzhufqQB028POSnHt6xoOYLr38i5O6vPxvyCyvihU6f+vjCkKec9q2Qhw6L38OAI/cOubZ/z4IaUF6cSQUAAEByaFIBAACQHJpUAAAAJIc1qQAAYJv8199eDfnRCd8MecbSNSF/8zdPh3xF3uvt0iFe0/S666eE/MzwS0N+93NLCmpafcjPQ540Z2XIN02dHfIT11wY8jkvDQ957PdizaP+Ia5JnVu/tqAGlBdnUgEAAJAcmlQAAAAkhyYVAAAAyWFNKgAA27nmroua74B94zVCD3ztLyGvuui6kN8+JK7/3KNvt5Av3fljIV/wX/fEx4+N60Gn7jeqoKbDXjg55JP3izUeNu/mkBd8Ieazen055Nk/PzPkHz+ypGCfqKxmz6Sa2XgzW2Fmc3LGeprZA2a2MPvaI+exK81skZktMLOTG35VAEClMG8DaA+Kebt/gqSheWNXSHrQ3QdIejDLMrODJI2QdHD2nF+ZWQcBAKppgpi3AbRxzTap7v6opNV5w8MkTczuT5R0Rs74ZHdf7+6vSFokaZAAAFXDvA2gPWjpmtTd3b1ekty93sx2y8b3lPRkznZ12RgAoHUxb7dR+etFm3v8g42bG9mycc2tQc33b2vidUw31u8Rcrc+u4R870/OCvnpuiEhT77qtpBv3G3nkL8+fW7IvxyT/0aBtDwvT9hzYMiX3/+jkKeecXXIjy0YFvK0eW8W7APVVe5P9zf0X1KDv/lmNtrMZpjZjA1aX+YyAABFatG8vW5N/olaACivljapy82sRpKyryuy8TpJfXO26yNpWUMv4O7j3L3W3Ws7qUsLywAAFKms83bX7j0b2gQAyqalTerdkrZe/2GUpLtyxkeYWRcz6y9pgKSnG3g+AKC6mLcBtCnNrkk1s0mSTpDUy8zqJF0t6TpJd5jZ+ZJekzRcktx9rpndIelFSRslXezumypUOwCgAczbbUtz1yhtbr3otq4nbcjwQ2tCPrhnbA8618c1oY9899GQN7y/MeRDn4yP568pHXZ5vM7pur4fD3nJ6nVNbr/z688q3/K3Pwj5p584J+TL87Y/K+81Fr4Vn99tRy4l39qa/Qm4+8hGHhrS0KC7j5U0tpSiAAAtx7wNoD3gz6ICAAAgOTSpAAAASA4LLgAAaEXbuqZ0166dQh5+yEdC7tvhvZBfWv+hgtf45ynPh3zyd+PfrT/qxO+FfNnwQ0M+LO86qB8977SQR//nvJB/2/XBkK//w/SQd//9EyFfOXjvkFcvfCbk2/c4XPl+/PkfhHzV438Medndcd3ri72OD7lmzJdCPv2b54c8Q4cU7BOVxZlUAAAAJIcmFQAAAMmhSQUAAEByWJMKAEArGnVkn5AP/2y8oufmjRtCXvP4L+PzJ78Q8sQRHwv5iCEXF+zz71NHh7zxH6eEvODka0P+15VrQj7u7OtCPmO/PUK+Zd8eIXd+Z9eQz/3BmJDP/smtIa9c1/Slev984+8Kxv56xkEhX/YPcV3r2j26hTx9fFznetr5N4U8tk/en2yPhwBVwJlUAAAAJIcmFQAAAMmhSQUAAEByWJMKAEAVddjBmnz83o2zQj7m8YdDzl+DemDeWssfP/pqyO/e9/2Cfbz/0KQma3jrigGxhpndQ975S58PudOceJ3T/Gu/1neK13K947fPhvx87YKQn3k8fg/jLo/XNP3n4/cpqHnEb+Ia00fOjNeH7T92ZshXf+24+Pjo4fEFp/0ibw9dCvaJyuJMKgAAAJJDkwoAAIDk0KQCAAAgOaxJBQCgiq4+Mq6V/PPq90M+t+b0kA/6xZMhf/mEfUOuP/5TTe5v5dJZBWOLbrg75EtOuCrkGae+HfLM09eF/MK8/UL+4q1Ph3zXmE+G3MHiOtyaR/4S8uG7xPWeq9/7IOThl8Rrw5408jTle/DjK0N+7rJxIf/3uGkFz8m17+MPh3zdh+P1ZjU1HjNUHmdSAQAAkByaVAAAACSHJhUAAADJYU0qAABV9NS7O4c8tOOikCfffEHIQ3Z4OeRNO8f1mh/89vyQr9/1zJA/8ta8gho6jzgm5D/NHx/yH896MeRPjDw05JM2xTWnc6/5dMjX9Dg45us+G/IJb6wKebext4X83rWjQ775+Xgd1uc/FuuXpEcefyTkr/TaEPLVdWtCvmnq7JA/+tHdQn7ic3Gd7vgBvUJ+cOGbBTWgvDiTCgAAgOTQpAIAACA5NKkAAABIDk0qAAAAksMHpwAAqKKFq+KF8Y86KH7I6FOvPRfyhmWvhfzWwHiR+XsvmhjyOZ9/JuTrvnBdQQ3fOuLIOPCVH4Z4zLWbQt57h9Uhb/rib0P++vS5Ic+7/Bch9zw+foip9259Ql59y5iQx57/s5Cn/jB+mKxnt3jxf0nae9cdQ163alnIX6p5L+RPfGtwyHs+FP9gwLJu8ecwatpeIQ8+tKagBpQXZ1IBAACQnGabVDMbb2YrzGxOzthPzWy+mc02s+lmtms23s/M3jezWdntlkoWDwAoxLwNoD0o5kzqBElD88YekHSIux8q6SVJV+Y8ttjdB2a3C8tTJgBgG0wQ8zaANq7ZNanu/qiZ9csbuz8nPinp8+UtCwDQUszbaXtpxbsh39mpQ8gXfvvBkFf+7tyQx9y7IOSfvfpsyN3rZoR84qWF/+7o9MsfhXzWvz8d8tQLBoX88DGfC/nr//aHkB+aXR/yYR/7SMizrv52fPzK80Kef0a8cP7/TP3XkBde8KuQv/jKvyvf/B3jcRz7WPwDAZs7Dw/51Kv/HPKapbElOvC4i0K+96KjQ/7xI0sKakB5lWNN6nmS7s3J/c3sOTN7xMyOK8PrAwDKi3kbQPJK+nS/mV0laaOkrf+kqpe0l7uvMrMjJd1pZge7+zsNPHe0pNGStKO6llIGAKBI5Zq3u/Xmk80AKqvFZ1LNbJSkz0g6x91dktx9vbuvyu7PlLRY0v4NPd/dx7l7rbvXdlLhpSQAAOVVznm7a/ee1SobwHaqRWdSzWyopO9IOt7d1+WM95a02t03mdk+kgZIerkslQIAWox5O12zlq4J+fLvnBPySZPj9T7HnHpgyHNXxuuudvza90I+6vbCCzY8dW5cp3rblP8Mec234zrYrx53Rcj95q0Iue6lN0P+y7l9Q/7IpCEhr+yzX8hf/MF9Ie910Fmx4GkvhHjxN+IaWUka9C/3xIHP/yDEUS/+NeQnrj8zbv+b74a4+KzDQmYNavU126Sa2SRJJ0jqZWZ1kq7Wlk+FdpH0gJlJ0pPZJ0IHS7rWzDZK2iTpQndf3eALAwAqgnkbQHtQzKf7RzYwfFsDY3L3aZKmlVoUAKDlmLcBtAf8xSkAAAAkp6RP9wMAgPJa+/eNIR89oFfIj70SV2O8nHfd1U/95PaQ97/z5wX7qJu7MuTr73ox5Glj4rrWy+t7hPyJvWP+4X3x2q1H3Dg/5DfGfyHkv63bNeQhJ3UO+def6V9Qc65X3+9QMNZnxBkhX3rgiSGfNifWsObhv8UajrogvuDcN5qsAZXHmVQAAAAkhyYVAAAAyaFJBQAAQHIsu55zq+pmPf1oG9L8hgCQ58/+p5nuXtvadWxvagYc4qNuvqO1y0AR9upZ+FcdN2zeHPJn9u8d8nNvrA15/w/vFPKLeetg86/1CjRm4qVnq37hHCtmW86kAgAAIDk0qQAAAEgOTSoAAACSw3VSAQBox15bva7ZbW59+vUmH5/x2tvlKgcoGmdSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJabZJNbPxZrbCzObkjF1jZkvNbFZ2OzXnsSvNbJGZLTCzkytVOACgYczbANqDYs6kTpA0tIHxm9x9YHa7R5LM7CBJIyQdnD3nV2bWoVzFAgCKMkHM2wDauGabVHd/VNLqIl9vmKTJ7r7e3V+RtEjSoBLqAwBsI+ZtAO1BKWtSLzGz2dnbSj2ysT0lvZ6zTV02BgBofczbANqMljapv5a0r6SBkuol3ZCNWwPbekMvYGajzWyGmc3YoPUtLAMAUKSyztvr1hR7ohYAWqZFTaq7L3f3Te6+WdKt+r+3huok9c3ZtI+kZY28xjh3r3X32k7q0pIyAABFKve83bV7z8oWDGC716Im1cxqcuKZkrZ+gvRuSSPMrIuZ9Zc0QNLTpZUIACgV8zaAtqZjcxuY2SRJJ0jqZWZ1kq6WdIKZDdSWt4SWSPqqJLn7XDO7Q9KLkjZKutjdN1WmdABAQ5i3AbQHzTap7j6ygeHbmth+rKSxpRQFAGg55m0A7QF/cQoAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJoUkFAABAcmhSAQAAkByaVAAAACSHJhUAAADJabZJNbPxZrbCzObkjE0xs1nZbYmZzcrG+5nZ+zmP3VLJ4gEAhZi3AbQHHYvYZoKkX0j63dYBd//C1vtmdoOkNTnbL3b3geUqEACwzSaIeRtAG9dsk+ruj5pZv4YeMzOTdLakT5W3LABASzFvA2gPSl2Tepyk5e6+MGesv5k9Z2aPmNlxJb4+AKC8mLcBtAnFvN3flJGSJuXkekl7ufsqMztS0p1mdrC7v5P/RDMbLWm0JO2oriWWAQAoUlnm7W69a6pSLIDtV4vPpJpZR0lnSZqydczd17v7quz+TEmLJe3f0PPdfZy717p7bSd1aWkZAIAilXPe7tq9ZzVKBrAdK+Xt/k9Lmu/udVsHzKy3mXXI7u8jaYCkl0srEQBQJszbANqMYi5BNUnSE5IOMLM6Mzs/e2iE4ltGkjRY0mwze17SnyRd6O6ry1kwAKBpzNsA2oNiPt0/spHxf2pgbJqkaaWXBQBoKeZtAO0Bf3EKAAAAyaFJBQAAQHJoUgEAAJAcmlQAAAAkhyYVAAAAyaFJBQAAQHJoUgEAAJAcmlQAAAAkhyYVAAAAyaFJBQAAQHJoUgEAAJAcmlQAAAAkhyYVAAAAyaFJBQAAQHJoUgEAAJAcmlQAAAAkhyYVAAAAyaFJBQAAQHJoUgEAAJAcmlQAAAAkhyYVAAAAyaFJBQAAQHJoUgEAAJAcmlQAAAAkhyYVAAAAyaFJBQAAQHJoUgEAAJAcmlQAAAAkx9y9tWuQma2U9J6kN1u7Fkm9RB25qCOijiiFOvZ2996tXMN2x8zWSlrQ2nUojd9BiTryUUdEHf+n6Dk7iSZVksxshrvXUgd1UAd1IH2p/Oypgzqoo+3VUSze7gcAAEByaFIBAACQnJSa1HGtXUCGOiLqiKgjSqUOVF8qP3vqiKgjoo4olTqKksyaVAAAAGCrlM6kAgAAAJJoUgEAAJCgVm9SzWyomS0ws0VmdkUV99vXzB4ys3lmNtfMvpGNX2NmS81sVnY7tQq1LDGzF7L9zcjGeprZA2a2MPvao8I1HJDzPc8ys3fM7NJqHA8zG29mK8xsTs5Yo9+/mV2Z/b4sMLOTK1zHT81svpnNNrPpZrZrNt7PzN7POS63VLiORn8OVT4eU3JqWGJms7Lxih0PpId5m3mbebuoOpi3S+XurXaT1EHSYkn7SOos6XlJB1Vp3zWSjsju7yLpJUkHSbpG0reqfByWSOqVN/YTSVdk96+QdH2Vfy5vSNq7GsdD0mBJR0ia09z3n/2MnpfURVL/7PenQwXrOElSx+z+9Tl19MvdrgrHo8GfQ7WPR97jN0j6fqWPB7e0bszb/78W5m3m7ebqYN4u8dbaZ1IHSVrk7i+7+weSJksaVo0du3u9uz+b3V8raZ6kPaux7yINkzQxuz9R0hlV3PcQSYvd/dVq7MzdH5W0Om+4se9/mKTJ7r7e3V+RtEhbfo8qUoe73+/uG7P4pKQ+5djXttbRhKoej63MzCSdLWlSOfaFNoV5u3HM28zbxWDeLlJrN6l7Sno9J9epFSYcM+sn6XBJT2VDl2RvE4yv9Ns1GZd0v5nNNLPR2dju7l4vbZmYJe1WhTq2GqH4S1zt4yE1/v235u/MeZLuzcn9zew5M3vEzI6rwv4b+jm01vE4TtJyd1+YM1bt44HWwby9BfN2IebtQszbJWjtJtUaGKvqNbHMbGdJ0yRd6u7vSPq1pH0lDZRUry2nxivtWHc/QtIpki42s8FV2GeDzKyzpNMlTc2GWuN4NKVVfmfM7CpJGyX9IRuql7SXux8u6ZuS/mhm3SpYQmM/h9b6b2ik4v8Qq3080HqYt7dg3i4e8zbzdou0dpNaJ6lvTu4jaVm1dm5mnbRlovuDu/+HJLn7cnff5O6bJd2qMp2Cb4q7L8u+rpA0PdvncjOryeqskbSi0nVkTpH0rLsvz2qq+vHINPb9V/13xsxGSfqMpHM8W8iTvU2zKrs/U1vWFO1fqRqa+Dm0xvHoKOksSVNy6qvq8UCrYt4W83YjmLdzMG+XrrWb1GckDTCz/tm/BEdIursaO87WZtwmaZ6735gzXpOz2ZmS5uQ/t8x17GRmu2y9ry0Lvudoy3EYlW02StJdlawjR/iXVrWPR47Gvv+7JY0wsy5m1l/SAElPV6oIMxsq6TuSTnf3dTnjvc2sQ3Z/n6yOlytYR2M/h6oej8ynJc1397qc+qp6PNCqmLeZtxvDvB3rYN4uVWt9YmvrTdKp2vIJzcWSrqrifj+hLafXZ0uald1OlXS7pBey8bsl1VS4jn205VN+z0uau/UYSPqwpAclLcy+9qzCMekqaZWk7jljFT8e2jK51kvaoC3/wjy/qe9f0lXZ78sCSadUuI5F2rJ2aOvvyC3Ztp/Lfl7PS3pW0mcrXEejP4dqHo9sfIKkC/O2rdjx4JbejXmbeZt5u6g6mLdLvPFnUQEAAJCc1n67HwAAAChAkwoAAIDk0KQCAAAgOTSpAAAASA5NKgAAAJJDkwoAAIDk0KQCAAAgOf8Lwshtz8bhKVcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 864x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "rows, cols = 1 ,2\n",
    "fig = plt.figure(figsize=(12,5))\n",
    "\n",
    "fig.add_subplot(rows,cols,1)\n",
    "plt.imshow(np.absolute(phase_image))\n",
    "\n",
    "fig.add_subplot(rows,cols,2)\n",
    "plt.imshow(np.angle(phase_image),cmap='RdBu')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x1f83e8a3c88>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "N = 200              # field array size\n",
    "L = 0.08             # source and observation plane side length, field of view, unit: meter\n",
    "dx = L/N\n",
    "x = np.arange(-L/2,L/2,dx)\n",
    "fx = np.arange(-1/(2*dx),1/(2*dx),1/L)\n",
    "[FX, FY] = np.meshgrid(fx,fx)\n",
    "        \n",
    "lmb = 7.5e-6   # wavelength of the optical wave,unit: meter\n",
    "z = 0.03             # distance of propagation(the distance bewteen two layers), unit: meter\n",
    "k = 2.0*np.pi/lmb    # wave number\n",
    "\n",
    "u0 = phase_image_padded\n",
    "kz = np.sqrt(k**2-np.square(2*np.pi*FX)-np.square(2*np.pi*FY))\n",
    "H = np.exp(1j*z*kz)\n",
    "H = tf.cast(H,dtype=tf.complex64)\n",
    "u1 = tf.signal.ifft2d(tf.signal.fft2d(u0)*tf.signal.fftshift(H))\n",
    "\n",
    "plt.figure(figsize=(8,8))\n",
    "plt.imshow(np.abs(u1),cmap='inferno')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
